#pragma once

#include "Topology.h"
#include "AttackerAs.h"

class ExpliSatConverter
{
public:
	ExpliSatConverter();
	~ExpliSatConverter();

	// Main method - Attraction Attack
	static Attack* CreateAttractionAttack(Topology* pTopology, As* pVictim, As* pAttacker);
	// Help Functions
	static BgpMessage* CreateAttractionAttackMsg(Topology* pTopology, As* pVictim, As* pAttacker);
	static Set<As*>* CreateAttractionAttackWhoToSendTo(BgpMessage* pMsg, As* pVictim, As* pAttacker);
	static Vector<As*>* CreatePathToPublish(Topology* pTopology);
	

	// Main method - Interception Attack
	static Attack* CreateInterceptionAttack(Topology* pTopology, As* pVictim, As* pAttacker);
	// Help Functions
	static BgpMessage* CreateInterceptionAttackMsg(Topology* pTopology, As* pVictim, As* pAttacker);
	//DFS
	static void DepthFirst(Topology* network, Vector<Vertex*>& visited, Vertex* end, Vector<Vector<As*>*>* dfsPaths);


	static Topology* CreateTopology(As* pVictim, AttackerAs* pAttacker);
	// pSizeOfPath - first create small size paths, and then longer and longer
	//static int SizeOfPath;

};

